home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / SciAn / src / ScianTypes.h < prev    next >
C/C++ Source or Header  |  1994-08-01  |  7KB  |  230 lines

  1. /* ScianTypes.h: header file for ScianTypes.c structures. requires
  2.         that Scian.h be included prior to this file.
  3.     This file contains, in order, what was once ScianObjects.h,
  4.     the old ScianTypes.h, and ScianArrays.h
  5. */
  6.  
  7. typedef unsigned long FlagsTyp;        /*Type for thing*/
  8. #define HTON_FLAGSTYP(x) htonl(x)    /* for NetObjects stuff */
  9. #define NTOH_FLAGSTYP(x) ntohl(x)    /* must be updated if type changes */
  10.  
  11. typedef unsigned long NameTyp;        /*Name defining things and variables*/
  12. #define HTON_NAMETYP(x) htonl(x)    /* for NetObjects stuff */
  13. #define NTOH_NAMETYP(x) ntohl(x)
  14.  
  15. /*Object types*/
  16. typedef struct VarsNode {
  17.     NameTyp        name;        /*ID # of this variable association */
  18.     struct Obj    *value;        /*(ThingPtr) value of this var. assoc.*/
  19.     struct Obj    *process;    /*process from which this thing came*/
  20.                     /* (Should eventually merge into value*/
  21.     struct VarsNode    *left;        /*internal pointers to subtrees */
  22.     struct VarsNode    *right;
  23.     unsigned long    chCount;    /*count number of changes to this var*/
  24.     unsigned long    remoteChCount;    /*change count on remote machine */
  25.     unsigned long    remoteNetID;    /*net id of remote object */
  26. } Vars, *VarsPtr;
  27.  
  28. typedef struct DependListEl {
  29.     NameTyp    indirectVar;
  30.     NameTyp var;
  31.     struct DependListEl *next;
  32. } *DLPtr;
  33.  
  34. typedef struct DependNode {
  35.     NameTyp          var;
  36.     DLPtr          dependList;
  37.     int          longestBranch;
  38.     struct DependNode *left;
  39.     struct DependNode *right;
  40. } Depend, *DependPtr;
  41.  
  42. typedef struct Obj {
  43.     FlagsTyp    flags;        /*Type flags of the thing*/
  44.     struct Obj    *class;        /*pointer to class of object */
  45.     VarsPtr        vars;        /*pointer to top node of Vars bintree*/
  46.     struct MethNode    *methods;    /* " to top node of Methods bintree */
  47.     DependPtr    depends;    /* " to top node of Dependencies tree */
  48.     int        garbageFlag;    /*flags for deletion record-keeping */
  49.         struct Obj    *gNext;        /*next node in garbage list*/
  50. } Thing, *ThingPtr, Obj, *ObjPtr;
  51.  
  52. #define NULLOBJ ((ObjPtr) 0)
  53. typedef ObjPtr (* FuncTyp)();        /*typedef Methods function pointers */
  54. extern ObjPtr ObjTrue;
  55. extern ObjPtr ObjFalse;
  56.  
  57. typedef struct MethNode {
  58.     NameTyp        name;        /*ID # of Method association */
  59.     FuncTyp        method;        /*pointer to Method function */
  60.     struct MethNode    *left;        /*internal pointers to subtrees */
  61.     struct MethNode *right;
  62. } Method, *MethodPtr;
  63.  
  64. extern long globalThingCount;    /* number of things in the world */
  65.  
  66. #define IncGlobalThingCount() (++globalThingCount)
  67.  
  68. /* EMP method declarations */
  69. ObjPtr        SetObjValue();
  70. ObjPtr        GetObjValue();
  71.  
  72. /*** former ScianObjects functions definitions */
  73.  
  74. #ifdef    PROTO
  75. Bool        IsTrue(ObjPtr);
  76. void        InitObjects();
  77. void        KillObjects();
  78. ObjPtr        NewObject(ObjPtr class,unsigned long extra);
  79. ObjPtr        ClassOf(ObjPtr);
  80. VarsPtr        GetVarNode(ObjPtr, NameTyp);
  81. Bool        CompareVarChangeCounts(ObjPtr, NameTyp, ObjPtr, NameTyp);
  82. unsigned long    GetVarChangeCount(ObjPtr, NameTyp);
  83. int        SetVarChangeCount(ObjPtr, NameTyp);
  84. ObjPtr        SetVar(ObjPtr object,NameTyp varname,ThingPtr value);
  85. Bool        ChangeVar(ObjPtr, NameTyp, ObjPtr);
  86. void        TurnOnStatistics();
  87. void        ClearStatistics();
  88. void        PrintStatistics();
  89. void        TurnOffStatistics();
  90. ThingPtr    GetVar(ObjPtr object,NameTyp varname);
  91. ThingPtr    Get1Var(ObjPtr, NameTyp);
  92. void        PrintObject(ObjPtr object);
  93. void        PrintVarNodes(VarsPtr vp, int indent);
  94. void        PrintVarTree(ObjPtr object);
  95. void        DeleteThing(ObjPtr thing);
  96. void        DecGlobalThingCount();
  97. FuncTyp        GetMethod(ObjPtr object, NameTyp methname);
  98. FuncTyp        Get1Method(ObjPtr, NameTyp);
  99. Bool        SetMethod(ObjPtr obj, NameTyp methname, FuncTyp value);
  100. void        AddDependency(DLPtr *, NameTyp, NameTyp);
  101. DependPtr    NewDependNode(NameTyp);
  102. Bool        SetIndirectDependency(ObjPtr, NameTyp, NameTyp, NameTyp);
  103. Bool        SetDependency(ObjPtr, NameTyp, NameTyp);
  104. void        GetDependencies(ObjPtr, NameTyp, void (*) (ObjPtr, NameTyp, NameTyp, NameTyp));
  105. void        PrintDependencies(ObjPtr, NameTyp);
  106. Bool        SanityCheckObject(ObjPtr);
  107. void        PrintAllDependencies(ObjPtr);
  108. #else
  109. Bool        IsTrue();
  110. void        InitObjects();
  111. void        KillObjects();
  112. ObjPtr        NewObject();
  113. ObjPtr        ClassOf();
  114. VarsPtr        GetVarNode();
  115. Bool        CompareVarChangeCounts();
  116. unsigned long    GetVarChangeCount();
  117. int        SetVarChangeCount();
  118. ObjPtr        SetVar();
  119. Bool        ChangeVar();
  120. void        TurnOnStatistics();
  121. void        ClearStatistics();
  122. void        PrintStatistics();
  123. void        TurnOffStatistics();
  124. ThingPtr    GetVar();
  125. ThingPtr    Get1Var();
  126. void        PrintObject();
  127. void        PrintVarNodes();
  128. void        PrintVarTree();
  129. void        DeleteThing();
  130. void        DecGlobalThingCount();
  131. FuncTyp        GetMethod();
  132. FuncTyp        Get1Method();
  133. Bool        SetMethod();
  134. void        AddDependency();
  135. DependPtr    NewDependNode();
  136. Bool        SetIndirectDependency();
  137. Bool        SetDependency();
  138. DLPtr        GetDependencies();
  139. void        PrintDependencies();
  140. Bool        SanityCheckObject();
  141. #endif
  142.  
  143. #define GetRefCount(thingp) ((thingp) ? (thingp) -> refCount : -1)
  144.  
  145. /*** former ScianTypes structures and functions */
  146.  
  147. typedef    struct    RealStruct {
  148.         Thing    thing;            /* flags and stuff */
  149.         real    realpart;        /* the actual Real data */
  150. } RealThing, *RPtr;
  151.  
  152. typedef ObjPtr RealPtr;
  153.  
  154. typedef struct    IntStruct {
  155.         Thing    thing;            /* flags and stuff */
  156.         int    intpart;        /* the actual Integer data */
  157. } IntThing, *IPtr;
  158.  
  159. typedef ObjPtr IntPtr;
  160.  
  161. typedef struct    StringStruct {
  162.         Thing    thing;            /* flags and stuff */
  163.         char    *stringPtr;        /* the actual String data */
  164. } StringThing, *SPtr;
  165.  
  166. typedef ObjPtr StringPtr;
  167.  
  168. #ifdef PROTO
  169. ObjPtr    NewInt(int intno);
  170. int    GetInt(ObjPtr ip);
  171. void    SetInt(ObjPtr ip,int intno);
  172. void    PrintInt(ObjPtr ip);
  173. ObjPtr    NewReal(real realno);
  174. real    GetReal(ObjPtr rp);
  175. void    SetReal(ObjPtr rp,real realno);
  176. void    PrintReal(ObjPtr rp);
  177. ObjPtr    NewString(char *string);
  178. char    *GetString(ObjPtr sp);
  179. Bool    SetString(ObjPtr sp, char *string);
  180. ObjPtr    ConcatStrings(ObjPtr, ObjPtr);
  181. void    PrintString(ObjPtr sp);
  182. Bool    Eql(ObjPtr, ObjPtr);
  183. ObjPtr    Clone(ObjPtr);
  184. #else
  185. ObjPtr    NewInt();
  186. int    GetInt();
  187. void    SetInt();
  188. void    PrintInt();
  189. ObjPtr    NewReal();
  190. real    GetReal();
  191. void    SetReal();
  192. void    PrintReal();
  193. ObjPtr    NewString();
  194. char    *GetString();
  195. Bool    SetString();
  196. ObjPtr    ConcatStrings();
  197. void    PrintString();
  198. Bool    Eql();
  199. void    Clone();
  200. #endif
  201.  
  202. /* Network things added to ScianTypes.c */
  203.  
  204. #define IsRemote(x) ((x) && (((ObjPtr)(x)) -> flags & ISREMOTE))
  205. #define IsPublished(x) ((x) && (((ObjPtr)(x)) -> flags & ISPUBLISHED))
  206. #define IsWaiting(x) ((x) && (((ObjPtr)(x)) -> flags & ISWAITING))
  207. #define IsDefunct(x) ((x) && (((ObjPtr)(x)) -> flags & ISDEFUNCT))
  208. #define IsRemoteAdvertised(x) ((x) && (((ObjPtr)(x)) -> flags & ISREMOTEADVERTISED))
  209.  
  210. /*temporary, I hope */
  211. /* #define IsNetworkStub(x) IsRemote(x) */
  212.  
  213. #define ISREMOTE    0x40000000L    /* it was received from some process */
  214. #define ISPUBLISHED    0x20000000L    /* it was sent to some remote process */
  215. #define ISWAITING    0x10000000L    /* some remote communication will fill this */
  216. #define ISDEFUNCT    0x08000000L    /* (NIY) this object is getting updated soon */
  217. #define ISREMOTEADVERTISED    0x04000000L    /* this object was advertised (instead of just published */
  218.  
  219. #define NETSTUBFLAG    0x7FFFL    /* special netid to flag unfetched things */
  220.  
  221. extern ObjPtr objClass;        /* so NetObjects.c can get to these */
  222. extern ObjPtr stringClass;
  223.  
  224.  
  225. extern unsigned long anotherDamnReferenceCount;
  226.  
  227. extern char *whatsMyName;
  228.  
  229. extern ObjPtr paletteClass;    /* should be in ScianColors.h, but Eric's gone */
  230.